Dasar Object di Move-Sui
Kamu sudah sampai jauh dan menuntaskan dasar-dasar Move-Sui. Sebelumnya kita sudah singgung object; sekarang kita dalami dari awal sampai cara memakainya lebih lanjut.
Mengingat Kembali: Apa Itu Object di Move-Sui?
Sederhananya, object adalah “wadah” data. Kita mendefinisikannya lewat struct sebagai blueprint field apa saja yang dimiliki. Contoh:
public struct Sum {
number_1: u8,
number_2: u8,
}
Ini belum menjadi Sui object. Agar jadi object on-chain, tambahkan ability key dan field id: UID (dari sui::object::UID) agar memiliki identitas unik di jaringan Sui:
public struct SumObject has key {
id: UID,
number_1: u8,
number_2: u8,
}
Ingat: semua kode harus berada di dalam module.
Membuat (Inisialisasi) Object
Untuk membuat object, semua field harus diisi. Field id diisi lewat object::new(ctx) yang memanfaatkan TxContext. Contoh:
module sum::sum {
public struct SumObject has key {
id: UID,
number_1: u8,
number_2: u8,
}
public fun new(num_1: u8, num_2: u8, ctx: &mut TxContext): SumObject {
SumObject { id: object::new(ctx), number_1: num_1, number_2: num_2 }
}
}
TxContext menyediakan info transaksi; object::new(ctx) membuat UID baru.
Menyimpan Object (Global Storage)
Object yang baru dibuat awalnya hanya ada dalam ruang eksekusi fungsi (lokal). Agar muncul di global storage (bisa dilihat explorer atau diakses module lain), kita gunakan module transfer.
Format sederhana:
transfer::function_call(object, recipient)
Umumnya kita ingin mentransfer kepemilikan ke pengirim transaksi (signer). Alamat signer didapat lewat tx_context::sender(ctx) di fungsi public entry (yang parameter terakhirnya &mut TxContext).
Contoh (rapikan dari contoh aslinya yang punya beberapa typo):
module sum::sum {
public struct SumObject has key {
id: UID,
number_1: u8,
number_2: u8,
}
entry fun new(a: u64, b: u64, ctx: &mut TxContext) {
let sumobject = SumObject {
id: object::new(ctx),
number_1: a,
number_2: b,
}
transfer::transfer(sumobject, tx_context::sender(ctx));
}
}
Tantangan
Buat kontrak animal dengan object AnimalObject yang punya field: name, no_of_legs, favorite_food. Buat constructor dan transfer kepemilikan object tersebut ke alamat sender.
Deploy ke Devnet/Testnet dan amati hasilnya.
Penutup
Sekarang kamu paham cara mendefinisikan, membuat, dan mem-publish object. Kerjakan tantangan agar konsep menempel kuat sebelum lanjut ke konsep objek lanjutan.